静态文件:上传服务器之后没有任何变化,上传是什么样,访问时就是什么样子
动态文件:不存在于服务器上的文件,他是由数据库等服务获取数据拼接成的
静态请求:请求html的请求
动态请求:请求的是非html文件
LNMP原理
1.用户通过`http`协议发起请求,请求会先抵达`LNMP`架构中的`Nginx`
2.`Nginx`会根据用户的请求进行判断,这个判断是有`Location`进行完成
3.判断用户请求的是静态页面,`Nginx`直接进行处理
4.判断用户请求的是动态页面,`Nginx`会将该请求交给`fastcgi`协议下发
5.`fastgi`会将请求交给`php-fpm`管理进程, `php-fpm`管理进程接收到后会调用具体的工作进程`warrap`
6.`warrap`进程会调用`php`程序进行解析,如果只是解析代码`php`直接返回
7.如果有查询数据库操作,则由`php`连接数据库(用户 密码 IP)发起查询的操作
8.最终数据由*`mysql->php->php-fpm->fastcgi->nginx->http->user`
LNMP概述
什么是LNMP
LNMP是一套技术的组合,L=Linux、N=Nginx、M=MySQL、P=PHP
静态请求:请求的页面都是html,服务器必须存在html文件
动态请求:请求的不是服务器上存在的html,带参数的请求
动态页面不是一个存于服务器在的页面,是去数据库或其他库获取数据拼装成的页面;
lnmp 工作原理
1576203497276
1.用户发起请求,到达nginx
2.nginx判断是动态请求还是静态请求
#静态请求
location / {
root /code;
index index.html;
}
#动态请求
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
}
3.如果是静态请求,nginx直接返回
4.如果是动态请求,nginx会通过fastcgi协议去找php-fpm管理进程
5.php-fpm管理进程调用、下发工作给wrapper工作进程
6.wrapper工作进程判断分析请求是否只是php内容
7.如果只是php内容,wrapper工作进程可以直接解析,然后返回结果
8.如果还有操作后面数据库等行为,他会帮你去请求数据库
9.最终数据由mysql->wrapper->php-fpm->fastcgi->nginx->http->user
LNMP架构搭建
1.安装nginx
1)配置nginx官方源
[root@web02 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
2)安装nginx
[root@web02 ~]# yum install -y nginx
3)创建用户与用户组
[root@web02 ~]# groupadd www -g 666
[root@web02 ~]# useradd www -u 666 -g 666
4)配置nginx用户
[root@web02 ~]# vim /etc/nginx/nginx.conf
user www;
5)启动nginx并开机自启
[root@web02 ~]# systemctl start nginx
[root@web02 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
6)验证启动
[root@web02 ~]# ps -ef | grep nginx
root 8272 1 0 10:39 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www 8273 8272 0 10:39 ? 00:00:00 nginx: worker process
root 8301 8112 0 10:43 pts/1 00:00:00 grep --color=auto nginx
[root@web02 ~]#
2.安装PHP
1)配置第三方源
[root@web02 ~]# vim /etc/yum.repos.d/php.repo
[php-webtatic]
name = PHP Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
2)卸载已安装的PHP
[root@web02 ~]# yum remove php-mysql-5.4 php php-fpm php-common
3)安装PHP 7.1版本
[root@web02 ~]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
#yum安装会出一些问题,报错
1.上传压缩包(yum缓存的rpm)
2.解压代码包
[root@web02 tmp]# tar xf php.tar.gz
3.安装所有rpm
[root@web02 tmp]# yum localinstall *.rpm
4)修改用户并启动PHP
[root@web02 tmp]# vim /etc/php-fpm.d/www.conf
user = www
group = www
[root@web02 tmp]# systemctl start php-fpm.service
[root@web02 tmp]# systemctl enable php-fpm.service
5)验证
[root@web02 tmp]# ps -ef | grep php
root 8673 1 0 11:21 ? 00:00:00 php-fpm: master process (/etc/php-fpm.conf)
www 8674 8673 0 11:21 ? 00:00:00 php-fpm: pool www
www 8675 8673 0 11:21 ? 00:00:00 php-fpm: pool www
www 8676 8673 0 11:21 ? 00:00:00 php-fpm: pool www
www 8677 8673 0 11:21 ? 00:00:00 php-fpm: pool www
www 8678 8673 0 11:21 ? 00:00:00 php-fpm: pool www
root 8683 8112 0 11:22 pts/1 00:00:00 grep --color=auto php
[root@web02 tmp]#
3.安装mariadb
1)安装mariadb
[root@web02 ~]# yum install mariadb-server -y
2)启动mariadb并加入开机自启
[root@web02 tmp]# systemctl start mariadb
[root@web02 tmp]# systemctl enable mariadb
3)验证
[root@web02 tmp]# mysql##进入数据库
MariaDB [(none)]> show databases;##查看数据库里面有什么库
create database xxx;##新建一个xxx库
5.搭建wordpress
1)上传包
[root@web02 ~]# rz wordpress-5.0.3-zh_CN.tar.gz
2)解压
[root@web02 ~]# tar xf wordpress-5.0.3-zh_CN.tar.gz
3)移动站点目录
[root@web02 ~]# mv wordpress /code/
4)授权
[root@web02 code]# chown -R www.www wordpress/
5)配置nginx
[root@web02 code]# vim /etc/nginx/conf.d/blog.linux.conf
server {
listen 80;
server_name blog.linux.com;
location / {
root /code/wordpress;
index index.php;
}
location ~ \.php$ {
root /code/wordpress;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
nginx关联语法
1)fastcgi_pass
#语法
Syntax: fastcgi_pass address;
Default: —
Context: location, if in location
fastcgi_pass 127.0.0.1:9000;
2)fastcgi_index
#语法
Syntax: fastcgi_index name;
Default: —
Context: http, server, location
fastcgi_index index.php;
3)fastcgi_param
Syntax: fastcgi_param parameter value [if_not_empty];
Default: —
Context: http, server, location
#语法调用模块 变量(标准格式) 站点目录 php文件名字
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /code/index.php;
6)配置数据库
[root@web02 ~]# mysqladmin -uroot password '123456'
##给数据库设置登录密码
[root@web02 wordpress]# mysql -uroot -p123456
##数据库设置密码后登录方式
MariaDB [(none)]> create database wordpress;
##添加wordpress数据库
7)访问页面配置主题等
附加 nginx和php服务上传文件大小优化
[root@web02 pic]# vim /etc/nginx/nginx.conf
client_max_body_size 100m;
[root@web02 pic]# vim /etc/php.ini
upload_max_filesize = 100M
post_max_size = 100M
静态资源共享
环境准备
| 主机名称 | 应用环境 | 外网地址 | 内网地址 |
|---|---|---|---|
| web01 | nginx+php | 10.0.0.7 | 172.16.1.7 |
| web02 | nginx+php | 10.0.0.8 | 172.16.1.8 |
| nfs | nfs | 10.0.0.31 | 172.16.1.31 |
| db01 | mysql | 10.0.0.51 | 172.16.1.51 |
搭建过程
1.准备服务端机器
1)搭建nfs、rpcbind
[root@nfs ~]# yum install -y nfs-utils rpcbind
2)创建用户及用户组
[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666
3)规划创建目录
[root@nfs ~]# mkdir /data/{wordpress,zh,edu} -p
4)授权目录
[root@nfs ~]# chown -R www.www /data/
5)配置nfs
[root@nfs ~]# vim /etc/exports
/data/wordpress 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/edu 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
6)启动服务
[root@nfs ~]# systemctl start rpcbind nfs
7)检测配置
[root@nfs ~]# cat /var/lib/nfs/etab
/data/edu 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
/data/zh 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
/data/wordprss 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
2.所有web做nfs客户端(所有的web服务器)
1)安装nfs、rpcbind
[root@web01 ~]# yum install -y nfs-utils rpcbind
2)启动rpcbind
3)查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/edu 172.16.1.0/24
/data/zh 172.16.1.0/24
/data/wordprss 172.16.1.0/24
4)查找图片位置,推送至nfs服务器
#推送wordpress的静态文件
[root@web01 ~]# scp -r /code/wordpress/wp-content/uploads/* 172.16.1.31:/data/wordpress/
#推送wecenter的静态文件
[root@web01 ~]# scp -r /code/zh/uploads/* 172.16.1.31:/data/zh/
#推送edusoho的静态文件
[root@web01 ~]# scp -r /code/edusoho/web/files/* 172.16.1.31:/data/edu/
5)挂载
[root@web01 files]# mount -t nfs 172.16.1.31:/data/wordpress /code/wordpress/wp-content/uploads/
[root@web01 files]# mount -t nfs 172.16.1.31:/data/zh /code/zh/uploads/
[root@web01 files]# mount -t nfs 172.16.1.31:/data/edu /code/edusoho/web/files/
配置负载均衡
[root@lb01 ~]# vim /etc/nginx/conf.d/default.conf
upstream node {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name blog.linux.com edu.linux.com zh.linux.com;
location / {
proxy_pass http://node;
proxy_set_header Host $http_host;
}
}
拆分数据库
为什么要拆分数据库
由于单台服务器运行LNMP架构会导致网站访问缓慢,当内存被占满时,很容易导致系统出现oom从而kill掉MySQL数据库,所以要将web和数据库进行独立部署
拆分后解决了什么问题
1.缓解web网站的压力 2.增强数据库读写性能
数据库拆分环境准备
| 主机名称 | 应用环境 | 外网地址 | 内网地址 |
|---|---|---|---|
| web01 | nginx+php | 10.0.0.7 | 172.16.1.7 |
| db01 | mysql | 10.0.0.51 | 172.16.1.51 |
开始拆分
1.取出数据库源数据(web01)
[root@web01 ~]# mysqldump -uroot -p -B wordpress > /tmp/wordpress.sql
2.推送源数据至新数据库服务器(web01)
[root@web01 ~]# scp /tmp/wordpress.sql 172.16.1.51:/tmp/
3.安装mariadb(db01)
[root@db01 tmp]# yum install -y mariadb-server
4.启动数据库(db01)
[root@db01 tmp]# systemctl start mariadb
5.导入数据(db01)
[root@db01 tmp]# mysqladmin -uroot password '123456'##给数据库设置密码
[root@db01 tmp]# mysql -uroot -p< /tmp/wordpress.sql##导入数据
6.查看数据库(db01)
[root@db01 tmp]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wordpress |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]>
7.把老的数据库停掉(web01)
[root@web01 ~]# systemctl stop mariadb
8.修改博客连接数据的php配置(web01)
[root@web01 ~]# vim /code/wordpress/wp-config.php
/** MySQL数据库用户名 */
define('DB_USER', 'wp');
/** MySQL主机 */
define('DB_HOST', '172.16.1.51');
9.测试远程连接数据库(web01)
[root@web01 ~]# mysql -uroot -p -h 172.16.1.51
#连接拒绝需要远端授权(db01)
[root@db01 tmp]# mysql -uroot -p
Enter password:
MariaDB [(none)]> grant all on wordpress.* to wp@'172.16.1.%' identified by '123456';##设置远程链接用户和权限
MariaDB [(none)]> select user,host from mysql.user;#查看授权的用户
+------+------------+
| user | host |
+------+------------+
| root | 127.0.0.1 |
| wp | 172.16.1.% |
| root | ::1 |
| | db01 |
| root | db01 |
| | localhost |
| root | localhost |
+------+------------+
7 rows in set (0.00 sec)
#再次测试远程连接
[root@web01 ~]# mysql -uwp -p123456 -h 172.16.1.51
10.页面访问测试
web服务器扩展
1.安装nginx
1)配置yum源
[root@web02 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
2)安装nginx
[root@web02 ~]# yum install -y nginx
3)创建用户
[root@web02 ~]# groupadd www -g 666
[root@web02 ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
4)配置nginx用户
[root@web02 ~]# vim /etc/nginx/nginx.conf
user www;
5)启动nginx
[root@web01 ~]# systemctl start nginx
2.安装php7.1
1.上传php包
[root@web01 ~]# cd /tmp/
[root@web01 tmp]# rz php.tar.gz
2.)卸载旧版本php
[root@web01 tmp]# yum remove php-mysql-5.4 php php-fpm php-common
3)解压安装php
[root@web01 tmp]# tar xf php.tar.gz
[root@web01 tmp]# yum localinstall -y *.rpm
4)修改用户
[root@web01 tmp]# vim /etc/php-fpm.d/www.conf
user = www
group = www
5)启动php
[root@web01 tmp]# systemctl start php-fpm
验证服务启动
[root@web01 tmp]# netstat -lntp
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 12293/php-fpm: mast
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12244/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6626/sshd
[root@web01 tmp]#
统一服务器
1.统一配置文件
[root@web01 code]# rsync -avz --delete /etc/nginx/ 172.16.1.8:/etc/nginx/
[root@web01 code]# rsync -avz --delete /etc/php* 172.16.1.8:/etc/
2.统一站点目录
#新的web服务器创建目录
[root@web02 ~]# mkdir /code
#原来的web01服务器打包推送
[root@web01 code]# tar zcf code.tar.gz ./*
[root@web01 code]# scp code.tar.gz 172.16.1.8:/code/
#新的web服务器上解压
[root@web02 code]# cd /code
[root@web02 code]# tar xf code.tar.gz